package org.oschina.helper.query.bak;

import java.util.List;

import org.oschina.helper.query.IQueryCacheCallback;

/**
 * 数据操作接口
 */
public interface IQueryHelper_bak {

	/**
	 * 查询
	 * @param <T>
	 * @param sql
	 * @param args
	 * @param type
	 * @return
	 */
	public <T>List<T> query(String sql,Object args[],Class<T> type);
	
	/**
	 * 查询_缓存
	 * @param <T>
	 * @param key 键
	 * @param timeout 超时时间
	 * @param sql
	 * @param args
	 * @param type
	 * @return
	 */
	public <T>List<T> query_cache(String key,int timeout,String sql,Object args[],Class<T> type);
	
	/**
	 * 查询_缓存_连续的列表储存查询的值
	 * @param <T>
	 * @param cacheKey
	 * @param itemKey
	 * @param timeout
	 * @param maxLength 最大缓存数量 超过这个数值不缓存  -1代表全部缓存
	 * @param first
	 * @param max
	 * @param type
	 * @param callback
	 * @return
	 */
	public <T>List<T> query_cache(String cacheKey,String itemKey,int timeout,int maxLength,int first,int max,Class<T> type,IQueryCacheCallback callback);
	
	/**
	 * 查询_缓存
	 * @param <T>
	 * @param cacheKey
	 * @param itemKey
	 * @param timeout 超时时间
	 * @param sql
	 * @param args
	 * @param type
	 * @return
	 */
	public <T>List<T> query_cache(String cacheKey,String itemKey,int timeout,String sql,Object args[],Class<T> type);
	
	/**
	 * 更新
	 * @param sql
	 * @param args
	 * @return
	 */
	public int update(String sql,Object...args);
	
	/**
	 * 更新_缓存
	 * @param key
	 * @param sql
	 * @param args
	 * @return
	 */
	public int update_cache(String key,String sql,Object...args);
	
	/**
	 * 返回对象
	 * @param <T>
	 * @param sql
	 * @param args
	 * @param type
	 * @return
	 */
	public <T>Object queryForObject(String sql,Object args[],Class<T> type);
	
	/**
	 * 返回对象_缓存
	 * @param <T>
	 * @param key
	 * @param timeout
	 * @param sql
	 * @param args
	 * @param type
	 * @return
	 */
	public <T>Object queryForObject_cache(String key,int timeout,String sql,Object args[],Class<T> type);
	
	/**
	 * 查询_拼接SQL
	 * @param <T>
	 * @param tableName
	 * @param columns
	 * @param where
	 * @param sort
	 * @param args
	 * @param type
	 * @param first
	 * @param max
	 * @return
	 */
	public <T>List<T> query(String tableName,String columns[],String where[],String sort[],Object args[],Class<T> type,int first,int max);

	/**
	 * 查询_拼接SQL_缓存
	 * @param <T>
	 * @param key
	 * @param tableName
	 * @param timeout
	 * @param columns
	 * @param where
	 * @param sort
	 * @param args
	 * @param type
	 * @param first
	 * @param max
	 * @return
	 */
	public <T>List<T> query_cache(String key,String tableName,int timeout,String columns[],String where[],String sort[],Object args[],Class<T> type,int first,int max);
	
	/**
	 * 查询_自定义key_拼接SQL_缓存
	 * @param <T>
	 * @param cacheKey
	 * @param itemKey
	 * @param tableName
	 * @param timeout
	 * @param columns
	 * @param where
	 * @param sort
	 * @param args
	 * @param type
	 * @param first
	 * @param max
	 * @return
	 */
	public <T>List<T> query_cache(String cacheKey,String itemKey,String tableName,int timeout,String columns[],String where[],String sort[],Object args[],Class<T> type,int first,int max);
	
	/**
	 * 返回对象
	 * @param <T>
	 * @param tableName
	 * @param columns
	 * @param where
	 * @param args
	 * @param type
	 * @return
	 */
	public <T>Object queryForObject(String tableName,String columns[],String where[],Object args[],Class<T> type);
	
	/**
	 * 返回对象_缓存
	 * @param <T>
	 * @param tableName
	 * @param columns
	 * @param where
	 * @param args
	 * @param type
	 * @return
	 */
	public <T>Object queryForObject_cache(String key,int timeout,String tableName,String columns[],String where[],Object args[],Class<T> type);
	
	/**
	 * 返回数据总量
	 * @param tableName
	 * @param where
	 * @param args
	 * @return
	 */
	public long queryDataSum(String tableName,String where[],Object args[]);
	
	/**
	 * 返回数据总量_缓存
	 * @param key
	 * @param tableName
	 * @param where
	 * @param args
	 * @return
	 */
	public long queryDataSum_cache(String key,int timeout,String tableName,String where[],Object args[]);
	
	/**
	 * 插入_拼接SQL
	 * @param tableName
	 * @param column
	 * @param args
	 * @return 返回主键
	 */
	public long insert(String tableName,String column[],Object args[]);
	
	/**
	 * 插入_拼接SQL_缓存
	 * @param key
	 * @param tableName
	 * @param column
	 * @param args
	 * @return
	 */
	public long insert_cache(String key,String tableName,String column[],Object args[]);
	
	/**
	 * 更新_拼接SQL
	 * @param tableName
	 * @param columns
	 * @param where
	 * @param args
	 * @return
	 */
	public int update(String tableName,String columns[],String where[],Object args[]);

	/**
	 * 更新_拼接SQL_缓存
	 * @param tableName
	 * @param columns
	 * @param where
	 * @param args
	 * @return
	 */
	public int update_cache(String key,String tableName,String columns[],String where[],Object args[]);

	/**
	 * 删除_拼接SQL
	 * @param tableName
	 * @param where
	 * @param args
	 * @return
	 */
	public int delete(String tableName,String where[],Object args[]);
	
	/**
	 * 删除_拼接SQL_缓存
	 * @param tableName
	 * @param where
	 * @param args
	 * @return
	 */
	public int delete_cache(String key,String tableName,String where[],Object args[]);
	
	/**
	 * 批量更新
	 * @param sql
	 * @param args
	 * @return
	 */
	public int[] batchUpdate(String sql,List<Object[]> args);

	/**
	 * 批量更新_缓存
	 * @param cache
	 * @param sql
	 * @param args
	 * @return
	 */
	public int[] batchUpdate_cache(String key,String sql,List<Object[]> args);
	
}